package com.dkd.day20250619;

import java.util.Stack;

public class Solutionsolve {
    public int solve (String s) {
        // write code here
        Stack<Integer> stack = new Stack<>();
        int num = 0;      // 当前数字
        char sign = '+';  // 当前运算符（初始为 '+'）

        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);

            if (Character.isDigit(c)) {
                // 读取完整数字（可能有多位）
                num = num * 10 + (c - '0');
            } else if (c == '(') {
                // 遇到括号，递归计算括号内的表达式
                int j = i + 1;
                int balance = 1; // 括号平衡计数器
                while (j < s.length() && balance != 0) {
                    if (s.charAt(j) == '(') balance++;
                    if (s.charAt(j) == ')') balance--;
                    j++;
                }
                String subExpr = s.substring(i + 1, j - 1);
                num = solve(subExpr); // 递归计算括号内的值
                i = j - 1; // 跳过已处理的括号部分
            } else if (c != ' ') {
                // 遇到运算符或右括号，先处理之前的数字和运算符
                if (sign == '+') {
                    stack.push(num);
                } else if (sign == '-') {
                    stack.push(-num);
                } else if (sign == '*') {
                    stack.push(stack.pop() * num);
                }
                // 更新当前运算符
                sign = c;
                num = 0; // 重置数字
            }
        }

        // 处理最后一个数字
        if (sign == '+') {
            stack.push(num);
        } else if (sign == '-') {
            stack.push(-num);
        } else if (sign == '*') {
            stack.push(stack.pop() * num);
        }

        // 计算栈中所有数字的和
        int res = 0;
        while (!stack.isEmpty()) {
            res += stack.pop();
        }
        return res;
    }
}
